//
// Created by PC on 2023/11/3.
/*
 * 贪心--线段覆盖
https://oj.hterobot.com/#/question/100818?questionbankid=100167
100818.线段覆盖
难度 普及
内存 256MB
时间 3000ms
题目描述

现在各大 oj 上有n个比赛，每个比赛的开始、结束的时间点是知道的。
xx认为，参加越多的比赛，noip 就能考的越好。
所以，他想知道他最多能参加几个比赛。
如果要参加一个比赛必须善始善终，而且不能同时参加2个及以上的比赛。

输入格式
第一行是一个整数n ，接下来n行每行是2个整数 ai,bi(ai<bi )，表示比赛开始、结束的时间。
输出格式
一个整数最多参加的比赛数目。
输入输出测试点
输入 #1
3
0 2
2 4
1 3
输出 #1
2

说明: 1<=n<=10^6, 0<=ai<bi<=10^6
 * */
//


#include <iostream>

using namespace std;

int main()
{
    int n = 3;
    cin >> n;
    int ret = 1;
    int arr[n][2] = {{0, 2},
                     {2, 4},
                     {1, 3}};
    for (int i = 0; i < n; ++i)
        cin >> arr[i][0] >> arr[i][1];

//    // 起始区域降序
//    for (int i = 0; i < n; ++i)
//    {
//        for (int j = 0; j < n - i - 1; ++j)
//        {
//            if (arr[j][0] < arr[j + 1][0])
//                swap(arr[j], arr[j + 1]);
//        }
//    }
    //  冒泡排序 按区域结束位置升序排列
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n - i - 1; ++j)
        {
            if (arr[j][1] > arr[j + 1][1])
                swap(arr[j], arr[j + 1]);
        }
    }
    // 第一个区间的右端点, 通过后边循环更新这个值, 判断是否重合
    int last_right = arr[0][2];
    for (int i = 1; i < n;++i)
    {
        if(last_right<=arr[i][0])
        {
            last_right=arr[i][1];
            ++ret;
        }
    }
//    for (int i = 0; i < n; ++i)
//        cout << arr[i][0] << ' ' << arr[i][1] << endl;
    cout << ret;
    return 0;
}